<?php

namespace App\Http\Controllers\Admin;

use App\Http\Model\Role;
use App\Http\Model\User;
use Illuminate\Http\Request;
use DB;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Validator;

class UserController extends Controller
{


//    给角色添加相应权限
    public function auth()
    {
//       1 接收传过来的角色、要赋予的权限数据
        $input = Input::all();

//         角色ID
        $user_id = $input['user_id'];
        $role_id = $input['role_id'];

//        删除当期角色已经有的权限
        $re =  DB::table('role_user')->where('user_id',$user_id )->delete();
        if(!$re){
            back()->with('errors','授权失败，请重新授权');
        }

//       2 授权（向permission_role表中写记录）
        foreach ($role_id as $v) {
            \DB::table('role_user')->insert(
                ['user_id' => $user_id, 'role_id' => $v]
            );
        }
        return redirect('admin/user');
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
       $keyword =  $request->input('keywords','');

        //获取用户数据列表
        $user = User::all();
//        将变量赋值给模型有三种方式
//        1 []数组的方式
//        return view('admin.user.index',['user'=>$user]);
//        2 with view辅助函数的with跟back()辅助函数的with是不一样的
//         view辅助函数的with的变量前台也是通过此变量名来接受的，而back跟随的with中的变量，前台是通过session来接受的
//        return view('admin.user.index')->with('user',$user);
//        return back()->with('a','aaaaa');
//        3 compact()
//        return view('admin.user.index',compact('user'));


//        分页
       $user =  User::where('user_name','like','%'.$keyword.'%')->paginate(2);
       return view('admin.user.index',compact('user','keyword'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        return view('admin.user.add');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //

        $input = Input::except('_token');

        $rule = [
            'user_name'=>'required|between:5,12',
            'user_pass'=>'required|between:6,18'
        ];

        $mess = [
            'user_name.required'=>'用户名必须输入',
            'user_name.between'=>'用户名的长度在5-12位之间',
            'user_pass.required'=>'密码必须输入',
            'user_pass.between'=>'密码的长度在6-18位之间',
        ];

        $validator = Validator::make($input, $rule,$mess);
//        如果验证失败
        if($validator->fails()){
            return back()
                ->withErrors($validator)
                ->withInput();
        }
        //添加用户
//        通过模型项数据库中添加数据的第一种方法
//        $user = new User();
//        $user->user_name = $input['user_name'];
//        $user->user_pass = Crypt::encrypt($input['user_pass']);
//        $re = $user->save();
//        向数据库中添加数据的第二中方法 create()
        $input['user_pass'] = Crypt::encrypt($input['user_pass']);
       $re =  User::create($input);
        //添加成功
        if($re){
            return redirect('admin/user');
        }else{
            return back()->with('errors','用户添加失败');
        }


    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //1 获取到当前用户
        $user =   User::find($id);
//        2 获取到所有的角色
        $roles = Role::get();
//        获取当前用户已经被授予的角色
        $own_roles=  \DB::table('role_user')->where('user_id',$id)->lists('role_id');
        //dd($own_pers);
//        3 将相关的数据（用户、角色）返回给授权页面
        return view('admin.user.auth',compact('user','roles','own_roles'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //返回修改页面
        $user = User::find($id);
        return view('admin.user.edit',compact('user'));

    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $input = Input::except('_token',"_method");
        //dd($input);
        //找到要修改的用户记录
        $user = User::find($id);
//        修改用户记录的第一种方法 save
        $user->user_name = $input['user_name'];
//        $re = $user->save();
//        修改用户记录的第二种方法 update
        $re = $user->update($input);
        if($re){
            return redirect('admin/user');
        }else{
            return back()->with('errors','修改失败');
        }


    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $data = [];
       $re =  User::find($id)->delete();
//        删除成功
       if($re){
            $data['status']= 0;
            $data['msg']='删除成功';
       }else{
           $data['status']= 1;
           $data['msg']='删除失败';
       }
       return $data;

    }
}
